package jp.syuriken.snsw.terenaibot;

import java.io.File;

/**
 * 設定上での例外
 * 
 * @author $Author: snswinhaiku.lo@gmail.com $
 * @version 0.1
 */
@SuppressWarnings("serial")
public class ConfigurationException extends Exception {
	
	private File configFile;
	
	private String configName;
	
	private ConfigurationExceptionType errorType;
	
	private String localizedMessage = null;
	

	/**
	 * 例外インスタンスを生成する。
	 * 
	 * @param configFile 設定ファイル
	 * @param configName 設定名
	 * @see #ConfigurationException(File, String, ConfigurationExceptionType)
	 */
	public ConfigurationException(File configFile, String configName) {
		this(configFile, configName, ConfigurationExceptionType.DEFAULT);
	}
	
	/**
	 * 例外インスタンスを生成する。
	 * 
	 * @param configFile 設定ファイル
	 * @param configName 設定名
	 * @param errorType エラータイプ
	 */
	public ConfigurationException(File configFile, String configName, ConfigurationExceptionType errorType) {
		super(configFile.getPath() + "の設定" + configName + "でエラー");
		this.configFile = configFile;
		this.configName = configName;
		this.errorType = errorType;
	}
	
	@Override
	public String getLocalizedMessage() {
		if (localizedMessage == null) {
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.append(configFile.getPath());
			stringBuilder.append(": ");
			stringBuilder.append(configName);
			switch (errorType) {
				case DEFAULT:
					stringBuilder.append(" は存在しないか、値として正しくありません。");
					break;
				case NOT_FOUND:
					stringBuilder.append(" は存在しません。");
					break;
				case NOT_DECIMAL:
					stringBuilder.append(" は正しい整数値ではありません。");
					break;
				case ILLEGAL:
					stringBuilder.append(" は正しい設定値ではありません。");
					break;
				default:
					stringBuilder.append(" " + errorType.toString());
					System.err.println("BUG: ConfigurationException#getLocalizedMessage: errorTypeのキャッチミス");
					break;
			}
			localizedMessage = stringBuilder.toString();
		}
		return localizedMessage;
	}
}
